package gogoqiu.plugin;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.codehaus.groovy.ast.ASTNode;
import org.codehaus.groovy.control.CompilePhase;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaPlugin;
//import org.gradle.api.annotations.Plugin;
import org.gradle.api.plugins.PluginManager;

import groovy.lang.GroovyClassLoader;
import org.codehaus.groovy.ast.ModuleNode;
import org.codehaus.groovy.control.CompilationUnit;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.ast.ASTNode;
import org.codehaus.groovy.ast.builder.AstBuilder;
import org.codehaus.groovy.control.CompilePhase;
import org.codehaus.groovy.control.SourceUnit;

/*
 * Groovy 调用 Java：直接调用即可，Groovy 完全兼容 Java 语法和类。
Java 调用 Groovy：Groovy 类会被编译为字节码，Java 可以像调用普通 Java 类一样调用（但需注意 Groovy 的动态特性可能在 Java 中无法直接使用，如闭包需按接口方式处理）。
编译顺序：Gradle 的 groovy 插件会先编译 Java 代码，再编译 Groovy 代码，
确保 Groovy 可以依赖 Java 类。如果需要 Groovy 类被 Java 依赖，
可将共享类放在 Groovy 目录（因为 Groovy 编译器会处理 Java 文件，若配置了 srcDir 'src/main/java'）。

定义插件 ID 的标准方式不是通过注解，而是在 build.gradle 中配置 plugin 块，或者在插件的 META-INF/gradle-plugins 属性文件中定义。
 */
// 使用注解时，引用的是 org.gradle.api.annotations.Plugin
// @Plugin(id = "gogoqiu.java.plugin")
public class MyJavaPlugin implements Plugin<Project> { // 实现的是 org.gradle.api.Plugin 接口
    /*
     * 1. 使用 Groovy 的官方 AST API，读写build.gradle，查询versionCode,
     * 然后自增1，然后回写到build.gradle
     * Groovy AST 是结构化的，但不保留原始代码的空白、注释、换行等。
     * 2. 使用本目录dev-tools.json
     */
    private void readGroovyAst(Project project) {
    }

    private void saveGroovyAst() {
    }

    
    

    /*
     * 
     */
    @Override
    public void apply(Project project) {
        //super( project );
        // 插件逻辑
        
        PluginManager manager = project.getPluginManager();
        
        if( manager.hasPlugin("java") || manager.hasPlugin("com.android.library") 
            || manager.hasPlugin("com.android.application")
            || manager.hasPlugin("java-library") ){
            
        }else{
            // 会中断编译过程？
            throw new RuntimeException("只能在java/java-library/android/android.library扩展存在时才能使用");
        }
    }
}
